#include <stdio.h>
#include <stdlib.h>
#include "actions.h"
void notes(int *AccordSelected, char** notes_latin, char** notes_ang, int Notation, int guitare)
{
    int Gamme;
    int Fondamentale;
    int note2, note3, note4;
    int i;
    int j;
    int size = 12;
    char c;
    
    FILE* file = NULL;
    
    if(guitare == 1)
    {
        size = 7;
        file = fopen("fichier_notes_simple.dat", "r");

    for(i=0; i<size; i++)
    {
        for (j=0;j<5; j++)
        {
            c=fgetc(file);

            if (c==';')
            {
                notes_latin[i][j]='\0';
                j=5;
            }
            else
            {
                notes_latin[i][j]=c;
            }
        }
        for (j=0;j<3; j++)
        {
            c=fgetc(file);
            if (c=='\n')
            {
                notes_ang[i][j]='\0';
                j=3;
            }
            else
            {
                notes_ang[i][j]=c;
            }
        }
    }
    }
    else
    {
    file = fopen("fichier_notes.dat", "r");

    for(i=0; i<size; i++)
    {
        for (j=0;j<5; j++)
        {
            c=fgetc(file);

            if (c==';')
            {
                notes_latin[i][j]='\0';
                j=5;
            }
            else
            {
                notes_latin[i][j]=c;
            }
        }
        for (j=0;j<3; j++)
        {
            c=fgetc(file);
            if (c=='\n')
            {
                notes_ang[i][j]='\0';
                j=3;
            }
            else
            {
                notes_ang[i][j]=c;
            }
        }
    }
    }
    if (Notation==1)
    {
        printf(" \n");
       for (i=0; i<size; i++)
       {
           printf("%d - %s \n",i,  notes_latin[i]);
       }
    }
    else if (Notation==2)
    {
        printf(" \n");
        for (i=0; i<size; i++)
        {
            printf("%d - %s\n",i, notes_ang[i]);
        }
    }
   
    printf("Veuillez choisir une note fondamentale parmis celles proposees.\n");
    scanf("%d", &Fondamentale);
   
    Gamme = AffichageGamme(Notation,notes_latin,notes_ang,Fondamentale);
 
    AccordSelected[5] = Gamme;
   
  
    if (Gamme==2)
    {
     
        if ((Fondamentale + 4)>=12)
        {
           
            note2=((Fondamentale+4)-12);
        }
        else
        {
            note2=Fondamentale + 4;
        }
        if ((Fondamentale + 7)>=12)
        {
            note3=((Fondamentale+7)-12);
        }
        else
        {
            note3=Fondamentale + 7;
        }  
       
        system("CLS");
         if(guitare != 1)
        {
        if(Notation == 1)
        {
                printf("Les notes de l'accord de %s Majeur sont : \n",notes_latin[Fondamentale]);
                printf("| %s | %s | %s |\n\n", notes_latin[Fondamentale],notes_latin[note2],notes_latin[note3]);
        }
        else if(Notation == 2)
        {
                printf("Les notes de l'accord de %s Majeur sont : \n",notes_ang[Fondamentale]);
                printf("| %s | %s | %s |\n\n", notes_ang[Fondamentale],notes_ang[note2],notes_ang[note3]);
        }
         }
    }
   
    if (Gamme==1)
    {
        if ((Fondamentale + 3)>=12)
        {
            note2=((Fondamentale+3)-12);
        }
        else
        {
            note2=Fondamentale + 3;
        }
        if ((Fondamentale + 7)>=12)
        {
            note3=((Fondamentale+7)-12);
        }
        else
        {
            note3=Fondamentale + 7;
        }
       
        system("CLS");
        
         if(guitare != 1)
    {
        if(Notation == 1)
        {
                printf("Les notes de l'accord de %s Mineur sont : \n",notes_latin[Fondamentale]);
                printf("| %s | %s | %s |\n\n", notes_latin[Fondamentale],notes_latin[note2],notes_latin[note3]);
        }
        else if(Notation == 2)
        {
                printf("Les notes de l'accord de %s Mineur sont : \n",notes_ang[Fondamentale]);
                printf("| %s | %s | %s |\n\n", notes_ang[Fondamentale],notes_ang[note2],notes_ang[note3]);
        }
         }
    }
    if (Gamme==3)
    {
        if ((Fondamentale + 4)>=12)
        {
            note2=((Fondamentale+4)-12);
        }
        else
        {
            note2=Fondamentale + 4;
        }
        if ((Fondamentale + 7)>=12)
        {
            note3=((Fondamentale+7)-12);
        }
        else
        {
            note3=Fondamentale + 7;
        }
        if ((Fondamentale + 10)>=12)
        {
            note4=((Fondamentale+10)-12);
            AccordSelected[3]=note4;
        }
        else
        {
            note4=Fondamentale + 10;
            AccordSelected[3]=note4;
        }
       
        system("CLS");
       
         if(guitare != 1)
    {
        if(Notation == 1)
        {
                printf("Les notes de l'accord de %s 7eme sont : \n",notes_latin[Fondamentale]);
                printf("| %s | %s | %s | %s |\n\n", notes_latin[Fondamentale],notes_latin[note2],notes_latin[note3],notes_ang[note4]);
        }
        else if(Notation == 2)
        {
                printf("Les notes de l'accord de %s 7eme sont : \n",notes_ang[Fondamentale]);
                printf("| %s | %s | %s | %s |\n\n", notes_ang[Fondamentale],notes_ang[note2],notes_ang[note3],notes_ang[note4]);
        }
         }
    }
    if (Gamme==4)
    {
        if ((Fondamentale + 3)>=12)
        {
            note2=((Fondamentale+3)-12);
        }
        else
        {
            note2=Fondamentale + 3;
        }
        if ((Fondamentale + 7)>=12)
        {
            note3=((Fondamentale+7)-12);
        }
        else
        {
            note3=Fondamentale + 7;
        }
        if ((Fondamentale + 10)>13)
        {
            note4=((Fondamentale+10)-12);
            AccordSelected[3]=note4;
        }
        else
        {
            note4=Fondamentale + 10;
            AccordSelected[3]=note4;
        }
       
        system("CLS");
       
          if(guitare != 1)
    {
        if(Notation == 1)
        {
                printf("Les notes de l'accord de %s 7eme Mineure sont : \n",notes_latin[Fondamentale]);
                printf("| %s | %s | %s | %s |\n\n", notes_latin[Fondamentale],notes_latin[note2],notes_latin[note3],notes_ang[note4]);
        }
        else if(Notation == 2)
        {
                printf("Les notes de l'accord de %s 7eme Mineure sont : \n",notes_ang[Fondamentale]);
                printf("| %s | %s | %s | %s | \n\n", notes_ang[Fondamentale],notes_ang[note2],notes_ang[note3],notes_ang[note4]);
        }
          }
    }
   
    AccordSelected[0]=Fondamentale;
    AccordSelected[1]=note2;
    AccordSelected[2]=note3;
    }
    /*  //Debug lines
    printf("%d\n",Fondamentale);
    printf("%d\n",note2);
    printf("%d\n",note3);
    printf("%d\n",note4);*/
     

 void Piano(int *AccordSelected, int notation, int affichage, char** notes_latin, char** notes_ang)
 {
     
     int quit;
     quit=0;
     int choix;
     int choice;
     
    //notation=verifnotation(notation);
    //affichage=verifaffichage(affichage);
     
        
     if(notation==1 || notation==2 && affichage==1 || affichage==2)
     {   
     
     notes(AccordSelected, notes_latin, notes_ang, notation,0);
    AffichageClavierPiano(AccordSelected,notation,affichage);
    while(quit==0)
    {    
    printf("Que voulez vous faire ?\n\n");
    printf("1- Continuer sur l'application\n");
    printf("2- Quitter l'application\n");
    scanf("%d",&choice);
    
    switch(choice)
    {
        case 1:
        quit=1;
        break;
                
        case 2:
        exit(EXIT_SUCCESS);
        break;
        
        default: printf("Veuillez retenter votre chance\n");
                 system("PAUSE");
                 system("CLS");
            
            
    }
    }
            
     }
     
     else
     {
         while(quit==0)
         {    
         system("CLS");
         printf("Veuillez d'abord saisir vos reglages\n\n");
         printf("1- Retourner au menu principal\n");
         printf("2- Quitter l'application\n");
         scanf("%d",&choix);
                 
         switch(choix)
         {
             case 1:
             quit=1;
             break;
             
             case 2:
             exit(EXIT_SUCCESS);
             break;
             
             default: printf("Veuillez retenter votre chance\n");
             system("PAUSE");
             system("CLS");
                 
                 
         }
         
         }
         
     }
     }
     
 
 void Guitare(int *AccordSelected, int notation, int affichage, char** notes_latin, char** notes_ang)
 {
     
     int quit;
     quit=0;
     int choix;
     int choice;
     //notation=verifnotation(notation);
   //affichage=verifaffichage(affichage);
     
      
     if(notation==1 || notation==2 && affichage==1 || affichage==2)
     {
    notes(AccordSelected, notes_latin, notes_ang, notation,1);
    AffichageClavierGuitare(AccordSelected,notation,affichage,notes_ang);
    while(quit==0)
    {   
    
    printf("Que voulez vous faire ?\n\n");
    printf("1- Continuer sur l'application\n");
    printf("2- Quitter l'application\n");
    scanf("%d",&choice);
    switch(choice)
    {
        case 1:
        quit=1;
        break;
                
        case 2:
        exit(EXIT_SUCCESS);
        break;
        
        default: printf("Veuillez retenter votre chance\n");
                 system("PAUSE");
                 system("CLS");
            
    }
    
            
     }
     
     }
     
     else
     {
         while(quit==0)
         {    
         system("CLS");
         printf("Veuillez d'abord saisir vos reglages\n\n");
         printf("1- Retourner au menu principal\n");
         printf("2- Quitter l'application\n");
         scanf("%d",&choix);
         
         switch(choix)
         {
             case 1:
             quit=1;
             break;
             
             case 2:
             exit(EXIT_SUCCESS);
             break;
             
             default: 
             printf("Veuillez retenter votre chance\n");
             system("PAUSE");
             system("CLS");
                 
                 
         }
         }
     }
     
     
 }
 
 int verifnotation(int notation)
 {
      int wait;
     
     if(notation!= (1 || 2))
     {
         printf("Veuillez selectionner une notation:\n");
         printf("1 - Standard\n");
         printf("2 - Complexe\n");
         scanf("%d", &notation);
         printf("notation: %d\n", notation);
         printf("Appuyez sur une touche pour continuer\n");
         scanf("%c", &wait);
         wait=0;
     }
      return notation;
 }
 int verifaffichage(int affichage)
 {
      int wait;
     
     if(affichage!= (1 || 2))
     {
         printf("Veuillez selectionner un type d'affichage\n");
         printf("1 - Simple\n");
         printf("2 - Complet\n");
         scanf("%d", &affichage);
         printf("affichage: %d\n", affichage);
         printf("Appuyez sur une touche pour continuer\n");
         scanf("%c", &wait);
         wait=0;
     }
      return affichage;
 }

 R* chaine(R* l1)
{


    FILE* file = NULL;
    file = fopen("ACCORD.txt", "r");
    char c;
    int i;


    while(c!=EOF)
    {
        if(c == '\n' && c != EOF)
        {
            c = fgetc(file);
            if(c == '1')
            {

                R* NewR = malloc(sizeof(R));
                NewR->next = l1;
                l1 = NewR;

                i = 0;
                while((c = fgetc(file)) != '\n')
                {
                    if(c != ':' && c != '\0')
                    {
                       l1->accord[i]=c;
                       i++;
                    }
                }
                l1->accord[i]='\0';

            }
            else if(c == '2')
            {
                i = 0;
                while((c = fgetc(file)) != '\n')
                {
                    if(c != ':' && c != '\0')
                    {
                        if(c == 'x')
                        {
                            l1->cases[i] = 'x';
                        }else{
                            l1->cases[i]=(c - '0');
                        }
                        c = fgetc(file);
                        if(c != ':' && c != '\n')
                        {
                            l1->cases[i]=(c - '0' + 10);
                        }else{fseek(file,-1,SEEK_CUR);}
                       i++;
                    }
                //l1->cases[i]='\0';
                }
            }
            else if(c == '3')
            {
                i = 0;
                while((c = fgetc(file)) != '\n')
                {
                    if(c != ':' && c != '\0')
                    {
                       l1->doigts[i]=c;
                       i++;
                    }
                l1->doigts[i]='\0';
                }
            }
        }
        else if(c != EOF)
        {
            c = fgetc(file);
        }
    };

    return l1;

}
void calcul_guitare(int nb_tab,char *accord,int *cases, char *doights,int **guitare)
{
    int debut;
    int fin;
    int decal = 0;
    int barre = 0;
    int i,j;
    int size;
    int note_ref = 100;
    int colonne;
    int ligne;
    char doights_cor[] = {'i','m','a','r'};
    int doights_num[4];

    //Marqueurs de début et de fin
    if(nb_tab == 1)
    {
       debut = 0;
       fin = 15;
    }
    else if(nb_tab == 2)
    {
       debut = 19;
       fin = 34;
    }
    else if(nb_tab == 3)
    {
       debut = 38;
       fin = 53;
    }
    
            //Tri pour récupérer la note la plus grave
            for(j=0;j<5;j++)
            {
            if(cases[j] != 'x')
            {
                if(cases[j] < note_ref && cases[j] != 0)
                {
                    note_ref = cases[j];
                }
            }
            }
        //Calcul decalage
        for(j=0;j<6;j++)
        {
            if(cases[j] != 'x')
            {
                if(note_ref >= 8)
                {
                    cases[j] = cases[j] - 8;
                    decal = 1;
                    guitare[2][fin+1] = note_ref-1;
                }else
                    
                if(note_ref > 4)
                {
                    cases[j] = cases[j] - 4;
                    decal = 1;
                    guitare[2][fin+1] = note_ref;
                }
            }
        }

        //Changement tete de manche de quitare
        if(decal == 1)
        {
            guitare[1][debut] = 218;
            guitare[1][fin] = 191;

            for(j=debut;j<fin;j++)
            {
                if(guitare[1][j] == 205)
                {
                    guitare[1][j] = 196;
                }
                if(guitare[1][j] == 203)
                {
                    guitare[1][j] = 194;
                }
            }
         }

    for(i=0;i<6;i++)
    {
        //colonne
        colonne = debut + i*3;

        //lignes
        if(cases[i] == 'x'){
            guitare[0][colonne] = 'x';
        }else if(cases[i] == 0){
            guitare[0][colonne] = 'o';
        }else if(cases[i] != 'x')
        {
            ligne = cases[i]*3;
            //fonction pour le barré
            if(barre == 0)
            {
                if(doights[i] == 'b')
                {
                    guitare[ligne][colonne] = 1;
                    
                    //calcule de la longueur du barré
                    
                    size = (6-i)*2; 
                    if(size <=4)
                    {
                        size = size-1;
                    }
                    if(size == 12)
                    {
                        size = size + 3;
                    }
                    for(j=1;j<size;j++)
                    {
                        guitare[ligne][colonne+j] = '=';
                    }
                    guitare[ligne][colonne+j] = 1;
                    barre = 1;
                }
            }
            //printf("%d - %d\n",ligne,colonne);    //debug line

            //Assignation de numeros aux doights
            for(j=0;j<4;j++)
            {
               
                if(doights[i] == doights_cor[j])
                {               
                    doights_num[j] = j+1;
                    guitare[ligne][colonne] = doights_num[j];
                    //printf("%c\n",doights_num[j]);    //debug line
                }
            }

        }

    }
}
